importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.ObjectUtils.js
//@include lib_sol.common.ObjectFormatter.js
//@include lib_sol.common.RepoUtils.js
//@include sol.common.ix.services.ChildrenDataCollector.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.services.ChildrenDataWithMaps" });
/**
* Collects all child sords for a given parent with all objKeys, all mapFields and the maskFieldnames of all objKeys.
* # Example
*
* var result = sol.common.IxUtils.execute("RF_sol_common_services_ChildrenDataWithMaps", {
* "parentId": "ARCPATH[(E10E1000-E100-E100-E100-E10E10E10E00)]:/Business Solutions/common/Configuration",
* "sordKeys": ["name", "id", "maskName", "guid", "parentId", "type", "desc"]
* });
*
* # Result
* {
* "sord": {
* "name": "Configuration",
* "id": "1838",
* "maskName": "Folder",
* "guid": "(5EE11DB8-CBE5-F0F6-4C8C-F9D292AEDD79)",
* "parentId": "1788",
* "type": "47",
* "desc": ""
* },
* "sords": [
* {
* "name": "as.config",
* "id": "1841",
* "maskName": "ELO Business Solution Configuration",
* "guid": "(89A52C86-6DF6-4EB6-1A7A-F9E84A016C0D)",
* "parentId": "1838",
* "type": "254",
* "desc": "",
* "mapKeys": {},
* "objKeys": {
* "BS_CONFIG_NAME": "ELO AS settings",
* "BS_CONFIG_VERSION": "1.0",
* "BS_CONFIG_TYPE": "",
* "SOL_TYPE": "",
* "ELO_FNAME": "as.config.json"
* }
* },
* {
* ...
* }
* ],
* "masks": {
* "ELO Business Solution Configuration": {
* "fields": {
* "BS_CONFIG_NAME": {
* "name": "Name",
* "type": "TEXT"
* },
* "BS_CONFIG_VERSION": {
* "name": "Version",
* "type": "TEXT"
* },
* "BS_CONFIG_TYPE": {
* "name": "Type",
* "type": "TEXT"
* },
* "SOL_TYPE": {
* "name": "Solution object type",
* "type": "TEXT"
* }
* }
* }
* }
* }
*/
sol.define("sol.common.ix.services.ChildrenDataWithMaps", {
extend: "sol.common.ix.ServiceBase",
collectorVersion: "1.00.000",
/**
* @property {Number} totalCount
* The search is terminated if this number of objects is found. If the number of results should not be constrained,
* set this value to 232-1 = 2147483647 (maximum value of a positive 32bit integer minus 1).
*
* Please note that collecting huge amounts of data might lead to performance issues.
*/
totalCount: 10000,
/**
* @cfg {Array} sordKeys
* List of required sord keys.
*
* This only returns the given sord keys. This is required in order to limit traffic for not required keys.
*
* sordKeys: ["id", "guid", "name", "desc"],
*/
sordKeys: ["id", "guid", "name", "desc"],
docMasks: {},
/**
* Starts the collection of the desired data
* @return {Array}
*/
execute: function () {
var me = this,
i;
me.getTypeConstants();
if (me.maskNames && me.maskNames.length > 0) {
for (i = 0; i < me.maskNames.length; i++) {
me.addDocMaskData(me.maskNames[i]);
}
}
var result = me.collectChildren();
return result;
},
/**
* @private
* helpers for collectChildren
*/
getSord: function (objId) {
try {
return ixConnect.ix().checkoutSord(objId, SordC.mbAll, LockC.NO);
} catch (e) {
throw "ChildrenDataWithMaps: could not checkout sord with objId/guid `" + objId + "`";
}
return null;
},
/**
* @private
* helpers for collectChildren
*/
addMapKeys: function (resultObj) {
var me = this;
return (resultObj.sords || [])
.map(function (formattedSord) {
var result = sol.common.ObjectFormatter.format({
sord: {
formatter: 'sol.common.ObjectFormatter.TemplateSord',
data: me.getSord(formattedSord.id),
config: {
allMapFields: true,
allObjKeys: true
}
}
});
formattedSord.mapKeys = (result || {sord: {}}).sord.mapKeys;
formattedSord.objKeys = (result || { sord: {} }).sord.objKeys;
if (!me.docMasks[result.sord.maskName]) {
me.addDocMaskData(result.sord.maskName);
}
return formattedSord;
});
},
/**
* @private
*/
collectChildren: function () {
var me = this,
tmpConfig, jsonDataCollector, resultString, result, resultObj;
tmpConfig = { ec: me.ec, user: me.user, parentId: me.parentId, sordKeys: me.sordKeys };
jsonDataCollector = sol.create("sol.common.ix.services.ChildrenDataCollector", tmpConfig);
resultString = jsonDataCollector.execute();
resultObj = JSON.parse(resultString);
result = { sord: resultObj.sord, sords: me.addMapKeys(resultObj), masks: me.docMasks };
return JSON.stringify(result);
},
/**
* @private
* Adds document mask data
* @param {String} maskName
* @return {Object}
*/
addDocMaskData: function (maskName) {
var me = this;
if (!me.docMasks[maskName]) {
me.docMasks[maskName] = me.buildDocMaskData(maskName);
}
return me.docMasks[maskName];
},
/**
* @private
* Builds the document mask data
* @param {String} docMaskName Document mask name
* @return {Object}
*/
buildDocMaskData: function (docMaskName) {
var me = this,
docMask, docMaskData;
docMaskData = { fields: {} };
try {
docMask = sol.common.SordUtils.getDocMask(docMaskName, me.ec.ci.language);
docMask.lines.forEach(function (docMaskLine) {
docMaskData.fields[docMaskLine.key] = { name: String(docMaskLine.name), type: me.docMaskLineTypes[docMaskLine.type] };
});
} catch (ex) {
logger.warn(["Can't get mask info: mask={0}, ec.ci.language={1}, exception={2}", docMaskName, me.ec.ci.language, ex]);
}
return docMaskData;
},
/**
* @private
*/
getTypeConstants: function () {
var me = this,
i, field, docMaskLineC, fields;
me.docMaskLineTypes = {};
docMaskLineC = new DocMaskLineC();
fields = docMaskLineC.class.declaredFields;
for (i = 0; i < fields.length; i++) {
field = fields[i];
field.accessible = true;
if (field.name.startsWith("TYPE_")) {
me.docMaskLineTypes[String(field.getInt(docMaskLineC))] = String(field.name.substring(5));
}
}
}
});
/**
* @member sol.common.ix.services.ChildrenDataWithMaps
* @method RF_sol_common_services_ChildrenDataWithMaps
* @static
* @inheritdoc sol.common.ix.ServiceBase#RF_ServiceBaseName
*/
function RF_sol_common_services_ChildrenDataWithMaps(ec, configAny) {
var config, jsonDataCollector, ecLang, ixConnectLang, result;
ecLang = String(ec.ci.language);
ixConnectLang = String(ixConnect.loginResult.clientInfo.language);
config = sol.common.ix.RfUtils.parseAndCheckParams(ec, arguments.callee.name, configAny),
config.ec = ec;
log.info("ec.ci.language=" + ecLang);
log.info("ixConnect.loginResult.clientInfo.language=" + ixConnectLang);
jsonDataCollector = sol.create("sol.common.ix.services.ChildrenDataWithMaps", config);
result = jsonDataCollector.execute();
return result;
}